home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Mail / SaveFromMail1_03 / Source / import_export_mailrc.l < prev    next >
Encoding:
Lex Description  |  1995-06-12  |  4.7 KB  |  180 lines

  1. %{
  2. /*
  3.  * import_export_mailrc
  4.  *
  5.  *    This program is used to convert .mailrc mail configuration file to
  6.  *      .mailalias NeXTMail configuration files and back.
  7.  * 
  8.  * Copyright (C) 1991 Roberto Di Cosmo
  9.  *
  10.  * Everyone is granted permission to copy, modify and redistribute
  11.  * this file, as far as this notice is preserved on all copies.
  12.  *
  13.  * Written by:
  14.  *      Roberto Di Cosmo <dicosmo@dmi.ens.fr>
  15.  *      Dipartimento di Informatica     LIENS
  16.  *      Universita' di Pisa             Ecole Normale Superieure
  17.  *      Corso Italia, 40                45, Rue d'Ulm
  18.  *      Pisa ITALY                      Paris FRANCE
  19.  *
  20.  * $Header: /users/formel2/dicosmo/Projects/SAVEFROMMAIL/RCS/import_export_mailrc.l,v 1.2 92/05/06 14:20:25 dicosmo Exp $
  21.  *
  22.  * $Log:    import_export_mailrc.l,v $
  23.  * Revision 1.2  92/05/06  14:20:25  dicosmo
  24.  * Conversion engine il Lex. Common body for command line
  25.  * and NeXTStep application.
  26.  * 
  27.  *
  28.  */
  29.  
  30. int     skipblanks =  1;
  31. char    *aliasname = "";
  32. char    *groupbody = "";
  33. char    *aliasbody = "";
  34. char    *aliases   = "";
  35. char    *tmp       = "";
  36. #define YES 1
  37. #define NO  0
  38. int     is_group    = NO;
  39. int     is_balanced = YES;
  40. int     l;
  41. %}
  42.  
  43. S       [ \t]+
  44. SS      [ \t]*
  45.  
  46. %Start NrmImp AName Addr0 Addr1 Addr2 Sep NrmExp Copy UserAlias UserAddr
  47.  
  48.  
  49. NAME                         [^ \t\n]+
  50. ADDRESS                             [^ \t\n,<>]+
  51.  
  52. %%
  53.  
  54. <NrmImp>^{S}*"alias"{S}*    {BEGIN AName;}
  55. <NrmImp>.                        ;
  56.  
  57. <AName>{NAME}                    {strcpy(aliasname,yytext); BEGIN Addr0;}
  58. <AName>[\n]                    {printf("***Missing alias name ...");}
  59.  
  60. <Addr0>{S}*"<"            {strcpy(tmp,"");BEGIN Addr1;}
  61. <Addr0>{S}*            {BEGIN Addr2;}
  62. <Addr0>(.|[\n])                 {printf("***Missing body of alias %s\n",aliasname);}
  63.  
  64. <Addr1>{S}                    ;
  65. <Addr1>{ADDRESS}            {strcat(tmp,yytext);}
  66. <Addr1>{S}*">"                  {BEGIN Sep;}
  67. <Addr1>[\n]            {printf("***Address %s of alias %s is not properly balanced ...",aliasbody,aliasname);}
  68.  
  69. <Addr2>{S}                    ;
  70. <Addr2>{ADDRESS}            {strcpy(tmp,yytext); BEGIN Sep;}
  71. <Addr2>[\n]            {printf("***Missing alias body of %s...",aliasname);}
  72.  
  73. <Sep>({S}|",")*[\n]            {if (is_group == YES) {strcat(groupbody,tmp);committ_import_group();is_group = NO;}
  74.                                  else {strcpy(aliasbody,tmp); committ_import_alias();}; BEGIN NrmImp;}
  75. <Sep>({S}|",")+"<"            {strcat(groupbody,tmp); is_group = YES; strcat(groupbody,"\, "); strcpy(tmp,"");BEGIN Addr1;}
  76. <Sep>({S}|",")+                {strcat(groupbody,tmp); is_group = YES; strcat(groupbody,"\, "); BEGIN Addr2;}
  77.  
  78.  
  79. <NrmExp>{S}                     ;
  80. <NrmExp>^"Private Users:"{S}*     {BEGIN UserAlias;}
  81. <NrmExp>^[^:]+":"                {strncat(aliasname, yytext, yyleng-1); BEGIN Copy;}
  82.  
  83. <Copy>({S}*|",")*[\n]            {committ_export_alias(); BEGIN NrmExp;}
  84. <Copy>.                          {strcat(aliasbody,yytext);}
  85.  
  86. <UserAlias>{S}                   {strcat(aliasname,"_");}
  87. <UserAlias>{S}*"<"               {BEGIN UserAddr;}
  88. <UserAlias>.                     {strcat(aliasname,yytext);}
  89. <UserAlias>[\n]                  {printf("***Missing address of alias %s\n",aliasname);}
  90.  
  91. <UserAddr>{S}                    ;
  92. <UserAddr>">"({S}|",")*[\n]      {committ_export_alias(); BEGIN NrmExp;}
  93. <UserAddr>">"({S}|",")*          {committ_export_alias(); BEGIN UserAlias;}
  94. <UserAddr>.                      {strcat(aliasbody,yytext);}
  95. <UserAddr>[\n]                   {printf("***Incomplete %s address in alias %s\n",aliasbody,aliasname);}
  96.  
  97. %%
  98.  
  99.  
  100. /*
  101.  * Commit group alias for IMPORT
  102.  */
  103.  
  104. committ_import_group()
  105. {
  106. printf("%s: %s\n", aliasname, groupbody);
  107. resetvars();
  108. }
  109.  
  110.  
  111. /*
  112.  * Commit user alias for IMPORT
  113.  */
  114.  
  115. committ_import_alias()
  116. {
  117. sprintf(tmp, "%s <%s>,", aliasname, aliasbody); 
  118. strcat(aliases, tmp);
  119. resetvars();
  120. }
  121.  
  122. /*
  123.  * Commit alias for EXPORT
  124.  */
  125.  
  126. committ_export_alias()
  127. {
  128. printf("alias %s %s\n", aliasname, aliasbody); 
  129. resetvars();
  130. }
  131.  
  132. /*
  133.  * this are the *REAL* conversion loops, that are exported...
  134.  */
  135.  
  136. void import_mailrc()
  137. {
  138.         allocfields();
  139.     initvars();
  140.         BEGIN NrmImp;
  141.         while (yylex()) {};
  142.         if ((l = strlen(aliases)) > 0) aliases[strlen(aliases)-1]=NULL;
  143.         printf("Private Users: %s\n", aliases);
  144. }
  145.  
  146. void export_mailrc()
  147. {
  148.         allocfields();
  149.     initvars();
  150.         BEGIN NrmExp;
  151.         while (yylex()) {};
  152. }
  153.  
  154. /* main()
  155. {import_mailrc();}
  156. */
  157.  
  158. allocfields()
  159. {       /* allocate memory for parser variables */
  160.         tmp       = malloc(6000);
  161.         aliasname = malloc(80);
  162.         aliasbody = malloc(1000);
  163.         groupbody = malloc(10000);
  164.         aliases   = malloc(50000); /* contains *ALL* the group aliases!!!!! */ 
  165. }
  166.  
  167. initvars()
  168. {
  169.     (void)strcpy(aliases,"");
  170.     resetvars();
  171. }
  172.  
  173. resetvars()
  174. {
  175.         (void)strcpy(tmp,       "" );   
  176.         (void)strcpy(aliasname, "" );   
  177.         (void)strcpy(aliasbody, "" );
  178.         (void)strcpy(groupbody, "" );
  179. }
  180.